package study.myself.exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.junit.Test;

/**
* @Name: ExceptionDemo03
* @Description: throw关键字与throws关键字的区别测试类
* throws：
* 	用在方法声明后面，跟的是异常类名；
* 	可以跟多个异常类名，用逗号分隔；
* 	表示抛出异常，由该方法的调用者来处理；
* 	表示出现异常的一种可能性，并不一定会发生这些异常；
* throw
* 	用在方法体内，跟的是异常对象；
* 	一处只能抛出一个异常对象；
* 	表示抛出异常，由方法体内的语句处理；
* 	而方法的调用者不需要对该异常进行显式处理，甚至说方法的调用者根本不知道调用的方法体内存在throw抛出的异常
* 	如果抛出了此异常，执行throw时，则一定会抛出某种指定的异常；
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-14 下午7:01:42 
* @Version: V1.0
 */
public class ExceptionDemo03 {
	
	/**
	* @Name: throwsTest
	* @Description: 调用包含throws抛出异常信息的方法，并对抛出的异常进行显式处理
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-14 下午7:18:47
	* @Parameters: 无
	* @Return: void 无
	 */
	@Test
	public void throwsTest() {
		//调用throwsException()方法，并对该方法抛出的异常进行处理
		try {
			throwsException() ;
		} catch (ParseException e) { //捕获异常信息
			//处理异常：打印该异常的堆栈信息
			e.printStackTrace();
		}
	}
	
	/**
	* @Name: throwsException
	* @Description: 使用throws关键字抛出异常信息
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-14 下午7:16:34
	* @Parameters: @throws ParseException
	* @Return: void 无
	 */
	public void throwsException() throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
		String str = "2013-11-21 12:13:00" ;
		Date date = sdf.parse(str) ;
		System.out.println(date);
	}
	
	/**
	* @Name: throwTest
	* @Description: 调用包含throw抛出异常的方法，并对异常信息进行捕获处理，而该异常的实际处理者为方法本身
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-14 下午7:19:11
	* @Parameters:  无
	* @Return: void 无
	 */
	@Test
	public void throwTest() {
		throwException() ;
	}
	
	/**
	* @Name: throwException
	* @Description: 使用throw关键字抛出异常信息
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-14 下午7:21:48
	* @Parameters: 无
	* @Return: void 无
	 */
	@Test
	public void throwException() {
		int a = 10 ;
		int b = 0 ;
		if(b == 0) {
			//抛出运行时异常对象
			throw new ArithmeticException() ;
		} else {
			//执行正常的业务代码
			System.out.println(a/b);
		}
	}

}

















